#include "mymapmodelkeystocolumn.h"

MyMapModelKeysToColumn::MyMapModelKeysToColumn(MyAbstractMapContainer * MapContainer, bool isVertical, QObject *parent) :
	QAbstractListModel(parent), mc(MapContainer), isV(isVertical){
}

Qt::ItemFlags MyMapModelKeysToColumn::flags(const QModelIndex &index) const{
//	if (!index.isValid())
//		return Qt::ItemIsEnabled;
	if(isV) // Если встолбик
		if(index.column() == 1) // Второй столбец.
			return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
		else
			return QAbstractItemModel::flags(index);
	else
		if(index.row() == 1) // Вторая строка.
			return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
		else
			return QAbstractItemModel::flags(index);
}

QVariant MyMapModelKeysToColumn::data(const QModelIndex &index, int role) const{
	if (index.isValid() && (role == Qt::DisplayRole || role == Qt::EditRole))
		if(isV) // Если встолбик
			if(index.column() == 1) // Второй столбец.
				return mc->getValue(index.row());
			else // Первый столбец.
				return mc->getKey(index.row());
		else// Если встрочку
			if(index.row() == 1) // Вторая строка.
				return mc->getValue(index.column());
			else // Первая строка.
				return mc->getKey(index.column());
	else
		return QVariant();
}

QVariant MyMapModelKeysToColumn::headerData(int section, Qt::Orientation orientation, int role) const{
	return QVariant();
}

int MyMapModelKeysToColumn::rowCount(const QModelIndex &parent) const{
	if(isV) // Если встолбик
		return mc->size();
	else// Если встрочку
		return 2;
}

int MyMapModelKeysToColumn::columnCount ( const QModelIndex & parent) const{
	if(isV) // Если встолбик
		return 2;
	else// Если встрочку
		return mc->size();
}

bool MyMapModelKeysToColumn::setData(const QModelIndex &index, const QVariant &value, int role){
	if (index.isValid() && role == Qt::EditRole) {
		if(isV) // Если встолбик
			if(index.column() == 1) // Второй столбец.
				mc->setValue(index.row(), value);
			else // Первый столбец.
				mc->setKey(index.row(), value);
		else// Если встрочку
			if(index.row() == 1) // Вторая строка.
				mc->setValue(index.column(), value);
			else // Первая строка.
				mc->setKey(index.column(), value);
		emit dataChanged(index, index);
		return true;
	}
	return false;
}

bool MyMapModelKeysToColumn::setHeaderData ( int section, Qt::Orientation orientation, const QVariant & value, int role){
	return false;
}

bool MyMapModelKeysToColumn::insertRows(int position, int rows, const QModelIndex &index){
	return false;
}

bool MyMapModelKeysToColumn::removeRows(int position, int rows, const QModelIndex &index){
	if(isV){ // Если встолбик
		bool rez = true;
		int n = position + rows;
		if(n > mc->size()) n = mc->size();
		beginRemoveRows(QModelIndex(), position, position+rows-1);
		for(int i = position; i < n; ++i){
			rez = rez && mc->deleteItem(i);
		}
		return rez;
	}else// Если встрочку
		return false;
}

bool MyMapModelKeysToColumn::insertColumns ( int column, int count, const QModelIndex & parent){
	return false;
}

bool MyMapModelKeysToColumn::removeColumns ( int column, int count, const QModelIndex & parent){
	if(isV) // Если встолбик
		return false;
	else{// Если встрочку
		bool rez = true;
		int n = column + count;
		if(n > mc->size()) n = mc->size();
		beginRemoveRows(QModelIndex(), column, column + count - 1);
		for(int i = column; i < n; ++i){
			rez = rez && mc->deleteItem(i);
		}
		return rez;
	}
}

QModelIndex MyMapModelKeysToColumn::parent ( const QModelIndex & index ) const{
	return QModelIndex();
}
